home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / TUTORIAL / 1307B.ZIP / COROUT3.MOD < prev    next >
Text File  |  1989-01-18  |  2KB  |  74 lines

  1.                                         (* Chapter 15 - Program 3 *)
  2. MODULE Corout3;
  3.  
  4. FROM InOut IMPORT WriteCard, WriteString, WriteLn;
  5.  
  6. FROM SYSTEM IMPORT WORD, PROCESS, ADR, SIZE,
  7.                    NEWPROCESS, TRANSFER;
  8.  
  9. VAR  main, Process1, Process2 ,Process3 : PROCESS;
  10.      WorkSpace1, WorkSpace2, WorkSpace3 : ARRAY[1..300] OF WORD;
  11.      Index : CARDINAL;
  12.  
  13. PROCEDURE MainProcess;
  14. BEGIN
  15.    FOR Index := 1 TO 5 DO
  16.       WriteString('This is loop');
  17.       WriteCard(Index,2);
  18.       IF Index > 2 THEN
  19.          TRANSFER(Process1,Process2);
  20.          WriteString(' and back to main loop');
  21.       END;
  22.       WriteLn;
  23.    END;
  24.    WriteString('End of the MainProcess loop');
  25.    WriteLn;
  26.    TRANSFER(Process1,main);
  27. END MainProcess;
  28.  
  29. PROCEDURE SubProcess;
  30. BEGIN
  31.    LOOP
  32.       WriteString(' in SubProcess');
  33.       TRANSFER(Process2,Process3);
  34.       WriteString(' back');
  35.    END;
  36. END SubProcess;
  37.  
  38. PROCEDURE ThirdProcess;
  39. BEGIN
  40.    LOOP
  41.       WriteString(' in ThirdProcess');
  42.       TRANSFER(Process3,Process1);
  43.       WriteString(' back');
  44.    END;
  45. END ThirdProcess;
  46.  
  47. BEGIN   (* Main Module Body *)
  48.    NEWPROCESS(MainProcess,ADR(WorkSpace1),SIZE(WorkSpace1),
  49.               Process1);
  50.    NEWPROCESS(SubProcess,ADR(WorkSpace2),SIZE(WorkSpace2),
  51.               Process2);
  52.    NEWPROCESS(ThirdProcess, ADR(WorkSpace3),SIZE(WorkSpace3),
  53.               Process3);
  54.    TRANSFER(main,Process1);
  55.    WriteString('End of the program');
  56.    WriteLn;
  57. END Corout3.
  58.  
  59.  
  60.  
  61.  
  62. (* Result of execution
  63.  
  64. This is loop 1
  65. This is loop 2
  66. This is loop 3 in SubProcess in ThirdProcess and back to main loop
  67. This is loop 4 back in SubProcess back in ThirdProcess and back to main loop
  68. This is loop 5 back in SubProcess back in ThirdProcess and back to main loop
  69. End of the MainProcess loop
  70. End of the program
  71.  
  72. *)
  73.  
  74.